#!/usr/bin/env python
# encoding: utf-8
# @author: Lin Han
# @contact: voldemort22@126.com
# @file: crud.py
# @time: 2021/4/20 15:51
# @desc:
from typing import List
from deprecated import deprecated

from utils.mongo_tools import retrieve_all_mongo_values
from views.configs import HISTORY_CLAMP_COLLECTION, MONGO_DATABASE_NAME, STANDARD_CLAMP_COLLECTION, STL_OSS_ADDRESS, STP_OSS_ADDRESS, RELATION_01_03_COLLECTION
from views.crud import retrieve_redis_values


def retrieve_standard_clamp_from_scene(scene: dict) -> List:
    """
    提取一条scene的完整数据中的所有的标准夹具的数据，返回一个标准夹具的列表。

    :param scene:
    :return:
    """
    standardClampResult = []
    for i in scene["standardClamp"]:
        try:
            temp_standard_clamp = retrieve_all_mongo_values(
                {"number": i},
                database_name=MONGO_DATABASE_NAME,
                collection_name=STANDARD_CLAMP_COLLECTION,
            )[0]
            standardClampResult.append(temp_standard_clamp)
        except:
            continue
    return standardClampResult


def retrieve_history_clamp_from_scene(scene: dict) -> List[dict]:
    """
    提取一条scene的完整数据中的所有的历史夹具的数据，返回一个历史夹具的列表。

    :param scene:
    :return:
    """
    historyClampResult = []
    for i in scene["historyClamp"]:
        try:
            temp_history_clamp = retrieve_all_mongo_values(
                {"number": i},
                database_name=MONGO_DATABASE_NAME,
                collection_name=HISTORY_CLAMP_COLLECTION,
            )[0]
            historyClampResult.append(temp_history_clamp)
        except:
            continue
    return historyClampResult


def retrieve_standard_clamp_from_scene_v2(scene: dict) -> List[dict]:
    """
    提取一条scene的完整数据中的所有的标准夹具的数据，返回一个标准夹具的列表。

    :param scene: 一条scene的标准数据
    :return: 只有一项的列表（或者为空）
    """
    standardClampResult = retrieve_redis_values(*scene["standardClamp"])
    return standardClampResult


def retrieve_history_clamp_from_scene_v2(scene: dict) -> List[dict]:
    """
    提取一条scene的完整数据中的所有的历史夹具的数据，返回一个历史夹具的列表。

    :param scene:
    :return:
    """
    historyClampResult = retrieve_redis_values(*scene["historyClamp"])
    return historyClampResult


def retrieve_standard_clamp_oss_address_from_scene(scene: dict) -> List:
    """
    查询场景数据里面的标准夹具的OSS地址，并返回给前端。

    :param scene: 一条从scene的collection中查询到的场景数据
    :return:
    """
    standardClampResult = []
    for i in scene["standardClamp"]:
        try:
            temp_standard_clamp = retrieve_all_mongo_values(
                {"number": i},
                database_name=MONGO_DATABASE_NAME,
                collection_name=STANDARD_CLAMP_COLLECTION,
            )[0]["file"][STL_OSS_ADDRESS]
            standardClampResult.append(temp_standard_clamp)
        except:
            continue
    return standardClampResult


def retrieve_history_clamp_oss_address_from_scene(scene: dict) -> List:
    """
    查询场景数据里面的历史夹具的OSS地址，并返回给前端。

    :param scene: 一条从scene的collection中查询到的场景数据
    :return:
    """
    historyClampResult = []
    for i in scene["historyClamp"]:
        try:
            temp_history_clamp = retrieve_all_mongo_values(
                {"number": i},
                collection_name=HISTORY_CLAMP_COLLECTION,
            )[0]["file"][STP_OSS_ADDRESS]
            historyClampResult.append(temp_history_clamp)
        except:
            continue
    return historyClampResult


@deprecated
def retrieve_standard_clamp_by_history_clamp(history_clamp_number: str):
    """
    到01_03_relation表里根据历史夹具的id号查询标准夹具的id号

    :param history_clamp_number:
    :return: 返回的是一个列表（正常的话只有一个元素，或者空列表）
    """
    data = retrieve_all_mongo_values(
        filter_conditions={"history_clamp_number": history_clamp_number},
        collection_name=RELATION_01_03_COLLECTION,
    )
    if len(data) > 0:
        return data[0]["standard_clamp_number"]
    return []
